﻿package com.Galaxisfarm {
	// Bibliotecas da game engine Flixel
	import com.adamatomic.flixel.*;
	
	public class Manure extends FlxSprite {
		// Sprite
		[Embed(source = "../../data/manure.png")] private var ImgSprite:Class;
		// Temporizador para evoluir o item
        private var _counter:Number = 10;
		// Estado inicial do item
		private var _state:int = 0;
		// Preço
		private var _price:Number = 15;
		// Para o contador que estraga o item
		private var _stoppedCounter:Boolean = false;
		
		// Método construtor
		public function Manure(X:Number, Y:Number):void {
			// Carrega o sprite
			super(ImgSprite, X, Y, false, false, 30, 25);
			
			// Define as animações
			addAnimation("normal", [2]);
			addAnimation("1", [3, 4, 5, 6, 7], 5, true);
			addAnimation("2", [8, 9], 5, true);
			addAnimation("3", [10, 11], 5, true);
			addAnimation("4", [12]);
		}
		
		// Método chamado constantemente
		override public function update():void {
			super.update();
			
			// Só estraga o item se o contador
			// não estiver parado
			if (!_stoppedCounter) {
				// Maior que zero vai
				// diminuindo o temporizador
				if (_counter > 0) {
					_counter -= FlxG.elapsed;
				}
			
				// Quando contador menor que zero
				// evolui o item
				if (_counter < 0) {
					// Volta o contador
					_counter = 10;
				
					// Só existem 4 estados
					if (_state < 4) {
						_state++;
						// Evolui o item
						play(String(_state));
					}
				}
			}
		}
		
		// Inicia o contador que estraga o item
		public function startCounter():void {
			_stoppedCounter = false;
		}
		
		// Para o contador que estraga o item
		public function stopCounter():void {
			_stoppedCounter = true;
		}
		
		// Indica se o item está deteriorado
		public function isDeteriorated():Boolean {
			if (_state == 4)
				return true;
			return false;
		}
		
		// Verifica se o item está em bom
		// estado
		public function isGood():Boolean {
			if (_state > 0)
				return false;
			
			return true;
		}
		
		// Obtém o estado
		public function getState():int {
			return _state;
		}
		
		// Obtém o preço
		public function getPrice():Number {
			return _price;
		}
		
		// Define o preço
		public function setPrice(Price:Number):void {
			_price = Price;
		}
	}
}